#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

bool Is_negative=false;

void Add_string(int num_1, int num_2,char *num_str)
{
    int a=num_1;
    int b=num_2;
    int len=strlen(num_str);
    int index=len-1;

    int over=0;
    while(b!=0||a!=0)
    {
        int cur=a%10+b%10+over;

        char num_char=cur%10+'0';

        over=cur/10;

        *(num_str+index)=num_char;
        index--;
        a=a/10;
        b=b/10;
    }
    if(over!=0)//表示有进位
    {
        if(Is_negative)
        {
            num_str[0]='-';
        }
        *(num_str+index)=over+'0';
    }
    else
    {
        if(Is_negative)
        {
            num_str[1]='-';
        }
    }
}

char * Add_exchange_string(int num_1,int num_2,int * ret)
{

    if((num_1>0&&num_2<0)||(num_1<0&&num_2>0))
    {
        //两者中间有一个负数
        //这种情况一定不可能越界
        *ret=num_1+num_2;
        return NULL;
    }

    //剩下的情况都可能越界
    //下面两者情况都需要多开一个字节的空间，因为可能出现越界
    
    int count_1=1;//用count来保存num_1的位数
    int count_2=1;//用count来保存num_2的位数
    int tmp1=num_1;
    int tmp2=num_2;

    while(tmp1/10!=0)
    {
        tmp1/=10;
        count_1++;
    }
    while(tmp2/10!=0)
    {
        tmp2/=10;
        count_2++;
    }

    int n=count_1>count_2?count_1:count_2;//用来保存数字的位数

        char * num_str=new char[n+1+1+1];//要比n位多出来3个,一个放结束标志'\0',一个放进位，一个放符号

        if(num_1<0&&num_2<0)
        {
            Is_negative=true;
            num_1*=-1;
            num_2*=-1;
        }
        num_str[n+1+1]='\0';
        int len=n+1+1;
        int i=0;

        for(i=0;i<len;++i)
        {
            num_str[i]='0';
        }
        Add_string( num_1,num_2,num_str);
        return num_str;
}


void Print_num(char * str)
{
    int i=0;
    for(i=0;*(str+i)!='\0';++i)
    {
        if(*(str+i)!='0')
        {
            printf("%s\n",str+i);
            break;
        }
    }
}


void TestAdd_exchange_string()
{

    int num_1=-334;
    int num_2=-234;
    int ret=0;
    char * str=Add_exchange_string(num_1,num_2,&ret);
    if(str)
    {
        Print_num(str);
        delete[] str;
    }
    else
    {
       printf("%d\n",ret);
    }


}




int main()
{
    TestAdd_exchange_string();
    return 0;
}
